package com.sxzt.core.result;

import com.sxzt.core.data.BaseResponse;
import com.sxzt.core.enum_status.BaseOut;
import com.sxzt.core.exception.CodeException;

/**
 * @author fly
 * @param <T> 参数泛型
 */
public interface Result<T> {


    GlobalResponseBuilder<T> getBuilder(BaseOut baseOut);

    /**
     * 利用构造者模式构建统一返回实体
     * @param baseOut 状态码枚举
     * @param data 返回数据
     * @return 统一返回实体
     */
    default BaseResponse<T> makeResult(BaseOut baseOut, T data) {

        if (baseOut == null) {
            try {
                throw new CodeException("构造器为空");
            } catch (CodeException e) {
                e.printStackTrace();
            }
        }
        return getBuilder(baseOut).buildCode().buildMes().buildData(data).buildOther().build();
    }


    /**
     * 定义通用返回成功
     * @return 全局返回
     */
    BaseResponse<T> success();

    /**
     * 定义通用错误返回
     * @return 全局返回
     */
    BaseResponse<T> error();





}
